/**
 * Java反射API
 * 场景使用
 *
 * Generics：泛型
 * GenericDeclaration: 所有声明泛型变量(TypeVariable)的公共接口
 * Type: Java中所有类型的顶层接口.这些类型包括原始类型(String等)、泛型类型(ParameterizedType)、泛型变量类型(TypeVariable)、通配符类型(WildcardType)、泛型数组类型(GenericArrayType)、数组类型(String[])等各种类型
 * GenericArrayType: 泛型数组类型
 * ParameterizedType: 带有泛型的参数化类型 例如List<String>、Map<Integer,String>、UserMapper<UserModel>这种带有泛型的类型。
 * WildcardType: 泛型通配符类型
 * TypeVariable: 泛型变量 List<T>中的T就是类型变量 <T,K,V> "T","K","V"
 *
 * Class和Method 方法中带有Generics的都是可以获取泛型类型的，其返回的接口是Type类型。
 *                  1.如果被获取对象是泛型变量，如：K,V,T, 那么方法返回的就是TypeVariable
 *                  2.如果被获取对象是泛型参数化类型，如：List<T> 那么返回的就是ParameterizedType
 *                  3.如果被后去对象不带泛型，如：String 那么返回的就是Class
 * example:
 *   1.getTypeParameters 只返回泛型变量（TypeVariable）
 *   2.getGenericReturnType 返回类型，如果是泛型变量就返回TypeVariable对象，如果是泛型参数化类型就返回ParameterizedType对象
 *   3.demoExtClass.getGenericSuperclass() 当父类不是泛型时返回的其实就是Class对象，是泛型时返回的是ParameterizedType类型
 *
 * AnnotatedElement: 注解元素顶层接口，此接口定义了反射获取注解的所有方法
 * AccessibleObject: 授权访问对象
 */
package com.wzw.basics.reflection;